在今天的學習中,我們將深入探索 Django 中介軟體的強大功能,學習如何利用中介軟體來進行應用邏輯的處理,並設置和優化 Django 的管理介面。透過本課程,我們將能夠在 Django 應用中運用中介軟體來實現靈活的功能擴展,提升使用者的管理體驗。
中介軟體是 Django 應用程式中一個非常重要的組件,它可以在請求處理的過程中攔截請求和響應,從而允許我們對這些請求和響應進行修改和處理。這可以用於多種目的,例如認證、日誌記錄、跨站請求偽造(CSRF)防護等。
Django 的請求-響應週期如下:
我們可以通過創建自定義中介軟體來實現特定功能。以下是一個示範中介軟體的範例:
# myapp/middleware.py
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# 一次性配置,例如啟動時的初始化
print("Middleware initialized!")
def __call__(self, request):
# 在處理請求之前執行
print("Before request")
# 繼續處理請求
response = self.get_response(request)
# 在處理請求之後執行
print("After request")
return response
中介軟體的應用範圍廣泛,你可以使用它來實現日誌記錄、請求處理和錯誤處理等功能。透過中介軟體,你能夠輕鬆地修改請求和響應的內容,以適應不同的業務需求。
將中介軟體註冊到 settings.py
中的 MIDDLEWARE
列表:
# myproject/settings.py
MIDDLEWARE = [
...
'myapp.middleware.SimpleMiddleware',
]
這樣,中介軟體便能在請求處理的每一個階段發揮作用。
Django 提供了強大的管理介面功能,可以讓開發者輕鬆管理資料模型。在這一部分,我們將學習如何設置和優化管理介面,以便更好地展示和操作資料。
在 myapp/admin.py
中,自定義 Book
模型的管理介面,以更好地展示和操作書籍資料:
# myapp/admin.py
from django.contrib import admin
from .models import Book
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date') # 設定顯示的欄位
search_fields = ('title', 'author') # 設定搜尋欄位
list_filter = ('published_date',) # 設定篩選欄位
admin.site.register(Book, BookAdmin)
這樣一來,在 Django 管理介面中,你將能夠更輕鬆地查找和管理書籍資料。
可以使用 fieldsets
來控制管理介面中欄位的顯示方式,以增強使用者的體驗:
class BookAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('title', 'author')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('published_date', 'isbn'),
}),
)
使用這種方式,你可以將管理介面分為不同的區塊,讓使用者能夠更清晰地找到需要的欄位。
Django 還提供了一些擴展功能,如自定義操作、內聯模型等,讓開發者能夠根據需求進一步擴展管理介面的功能。比如,你可以在管理介面中添加自定義的操作選項,以便快速處理多個選中的項目:
class BookAdmin(admin.ModelAdmin):
actions = ['mark_as_published']
def mark_as_published(self, request, queryset):
queryset.update(published_date=timezone.now())
self.message_user(request, "Selected books have been marked as published.")
這樣,當管理員選中多本書籍時,就能夠快速標記它們為已發布狀態。
在應用開發過程中,良好的中介軟體設計和管理介面優化能顯著提升應用的可維護性和使用者體驗。以下是一些最佳實踐:
透過今天的學習,我們深入了解了 Django 中介軟體的工作原理和自定義中介軟體的創建過程,以及如何設置和優化 Django 的管理介面。這些知識不僅增強了我們對 Django 應用的控制能力,還提升了使用者管理資料的體驗。隨著對這些核心概念的掌握,我們的 Django 開發技能將會更加精進!